﻿using System;
using System.Collections.Generic;

using System.Text;

namespace Sinacor.Tools.Negocio
{
    public class TraducaoMensagem : NegocioBase<Entidade.TraducaoMensagem>
    {

        protected Dado.TraducaoMensagem dados = null;
        public override void incluir(Sinacor.Tools.Entidade.TraducaoMensagem entidade)
        {
            this.validaInclusao(entidade);
            dados = new Sinacor.Tools.Dado.TraducaoMensagem();
            dados.incluir(entidade);
            
        }


        public bool jaEstaCadastrada(Sinacor.Tools.Entidade.TraducaoMensagem entidade, Sinacor.Tools.Entidade.Mensagem entidadeModulo)
        {
            dados = new Sinacor.Tools.Dado.TraducaoMensagem();
            return dados.jaEstaCadastrada(entidade, entidadeModulo) == null ? false : true;
        }

        public int? consultaCodigoTextoID(Sinacor.Tools.Entidade.TraducaoMensagem entidade, Sinacor.Tools.Entidade.Mensagem entidadeModulo)
        {
            dados = new Sinacor.Tools.Dado.TraducaoMensagem();
            return dados.consultaCodigoTextoID(entidade, entidadeModulo);
        }

        public int? consultarID(Sinacor.Tools.Entidade.TraducaoMensagem entidade, Sinacor.Tools.Entidade.Mensagem entidadeModulo)
        {
            dados = new Sinacor.Tools.Dado.TraducaoMensagem();
            return dados.consultaID(entidade, entidadeModulo);
        }

        public override void alterar(Sinacor.Tools.Entidade.TraducaoMensagem entidade)
        {
            validaAlteracao(entidade);
            dados = new Sinacor.Tools.Dado.TraducaoMensagem();
            dados.alterar(entidade);
        }

        public override void deletar(Sinacor.Tools.Entidade.TraducaoMensagem entidade)
        {
            validaDelecao(entidade);
            
            dados = new Dado.TraducaoMensagem();

            //bool retorno = verificaDependencia(entidade);

            //if (retorno) 
            //    mensagemDependencia(entidade);                

            dados.deletar(entidade);
        }

        public bool verificaDependencia(Sinacor.Tools.Entidade.TraducaoMensagem entidade)
        {
            dados = new Dado.TraducaoMensagem();
            object retorno = dados.verificaDependencia(entidade);
            return retorno == null ? false : true;
        }

        public override List<Sinacor.Tools.Entidade.TraducaoMensagem> consultar(Sinacor.Tools.Entidade.TraducaoMensagem entidade)
        {
            throw new NotImplementedException();
        }

        protected void validaAlteracao(Sinacor.Tools.Entidade.TraducaoMensagem entidade)
        {
            //a validação é a mesma
            this.validar(entidade);

        }

        protected void mensagemDependencia(Entidade.TraducaoMensagem entidade)
        {
            string mensagem = string.Format("A Mensagem Id: {0} e Texto: {1} não pode ser excluída, existe(m) Resourcekey(s) associada(s).", entidade.IdMensagem, entidade.MensagemTraduzida);
           throw new Exception(mensagem);            
        }

        protected void validaDelecao(Sinacor.Tools.Entidade.TraducaoMensagem entidade)
        {
            //a validação é a mesma
            string mensagem = string.Empty;

            if (entidade.Idioma == null || entidade.Idioma.Id == null)
            {
                mensagem += "O código do idioma é obrigatório!" + Environment.NewLine;
            }

            if (entidade.StatusTraducao == null || entidade.StatusTraducao.Id == null)
            {
                mensagem += "O status da tradução do idioma é obrigatório!" + Environment.NewLine;
            }

            if (entidade.IdMensagem == null || entidade.IdMensagem < 0)
            {
                mensagem += "O id da mensagem é obrigatório!" + Environment.NewLine;
            }

            if (!string.IsNullOrEmpty(mensagem))
            {
                throw new Exception(mensagem);
            }
        }

        protected void validaInclusao(Sinacor.Tools.Entidade.TraducaoMensagem entidade)
        {
            this.validar(entidade);
        }
        
        protected void validar(Sinacor.Tools.Entidade.TraducaoMensagem entidade)
        {
            string mensagem = string.Empty;

            if (entidade.Idioma == null || entidade.Idioma.Id == null)
            {
                mensagem += "O código do idioma é obrigatório!" + Environment.NewLine;
            }

            //if (entidade.StatusTraducao == null || entidade.StatusTraducao.Id == null)
            //{
            //    mensagem += "O status da tradução do idioma é obrigatório!" + Environment.NewLine;
            //}

            //if (entidade.IdMensagem == null || entidade.IdMensagem < 0)
            //{
            //    mensagem += "O id da mensagem é obrigatório!" + Environment.NewLine;
            //}

            if (string.IsNullOrEmpty(entidade.MensagemTraduzida))
            {
                mensagem += "A mensagem é obrigatória!" + Environment.NewLine;
            }

            if (!string.IsNullOrEmpty(mensagem))
            {
                throw new Exception(mensagem);
            }
            
        }
    }
}
